/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import Dao.BoletaJpaController;
import Dao.exceptions.IllegalOrphanException;
import Dao.exceptions.NonexistentEntityException;
import Dao.exceptions.PreexistingEntityException;
import Logico.Boleta;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class ControladorBoleta {
    
    BoletaJpaController daoBoleta;
    ConnectionFactory conection;

    public ControladorBoleta() {

        conection = new ConnectionFactory();
        daoBoleta = new BoletaJpaController(conection.getFactory());
    }

    public boolean guardar(int idboleteria, String estado, Date fechaingreso, String horaingreso, String tipo, int costo) {

        boolean guardado = false;

        Boleta boleta = new Boleta();
        boleta.setIdboleteria(idboleteria);
        boleta.setEstado(estado);
        boleta.setFechaingreso(fechaingreso);
        boleta.setHoraingreso(horaingreso);
        boleta.setTipo(tipo);
        boleta.setCosto(costo);
        
        try {
            daoBoleta.create(boleta);
            guardado = true;

        } catch (PreexistingEntityException ex) {
            JOptionPane.showMessageDialog(null, "Ya existe una boleta con la id: " + idboleteria + ". Por favor inténtelo de nuevo");
        } catch (Exception ex) {
            Logger.getLogger(ControladorBoleta.class.getName()).log(Level.SEVERE, null, ex);
        }

        return guardado;
    }
    
    public boolean borrar(int idboleteria) {

        boolean borrado = false;
        try {   

            daoBoleta.destroy(idboleteria);
            borrado = true;
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorBoleta.class.getName()).log(Level.SEVERE, null, ex);
        }            

        return borrado;
    }

    public boolean modificar(int idboleteria, String estado, Date fechaingreso, String horaingreso, String tipo, int costo) {

        boolean modificado = false;

        Boleta boletaEncontrada = this.buscar(idboleteria);

        if (boletaEncontrada != null) {

            boletaEncontrada.setEstado(estado);
            boletaEncontrada.setFechaingreso(fechaingreso);
            boletaEncontrada.setHoraingreso(horaingreso);
            boletaEncontrada.setTipo(tipo);
            boletaEncontrada.setCosto(costo);

            try {

                daoBoleta.edit(boletaEncontrada);
                modificado = true;
            } catch (IllegalOrphanException ex) {
                Logger.getLogger(ControladorBoleta.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(ControladorBoleta.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(ControladorBoleta.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            JOptionPane.showMessageDialog(null, "La boleta no se encuentra en nuestro sistema.");
        }

        return modificado;
    }
    
    public Boleta buscar(int idboleteria) {

        return daoBoleta.findBoleta(idboleteria);
    }

    public List<Boleta> listarBoletas() {

        return daoBoleta.findBoletaEntities();
    }
    
}
